var DEBUG = false;

/**
 * Module dependencies.
 */

var express = require('express');
var DBController = require('./db/control_db').DBController;
var dbc = new DBController();

var OAuthId = require('./oauth').OAuthId;
var oauth = (new OAuthId).createId("pggm");

var app = module.exports = express.createServer();

// Twitter監視モジュールのロード

var TweetWatcher = require('./twitter-notice').TweetWatcher;

function actionWhenTweetUpdated(array_of_tweets){
	console.log("Array of tweets.");
	console.log(array_of_tweets);
	dbc.match_containText(array_of_tweets, function(r){});
};
var tw = new TweetWatcher('g_m_k', 120000, actionWhenTweetUpdated);
tw.startWatching(); 

// appの設定

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({secret: 'rmb48xxx'}));
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
  app.use(express.errorHandler()); 
});

// ページ振分などに利用するメソッドの設定

function isLogin(req){
	return req.session && req.session.user;
}

// Routes（アクセスパス）の設定

//ルートへのアクセスは許可しない
//app.get('/', function(req, res){
//  res.render('index', {
//    title: 'Express'
//  });
//});

// ページ：トップページ、ログイン有無により振り分け

app.get('/rmb48/?', function(req, res){
  if(isLogin(req)){
	//ログイン済みの場合
	var callback = function(r){
		if(DEBUG)console.log(r);
		if(DEBUG)console.log(Date.parse(r[0].updated));
		if(DEBUG)console.log((new Date).getTime()+(9*3600*1000));
		res.render('index',{
		title: 'rmb48',
		isLoggedIn: true,
		name: req.session.user,
		collections: r
    		})};
	if(DEBUG)console.log('TRY TO GET COLLECTIONS');	
	dbc.get_collection(req.session.user, callback);

  } else {
    //未ログインの場合
    res.render('index_nologin',{
      title: 'rmb48',
      isLoggedIn: false
    });
  }
});

// ページ：ログイン

app.get('/rmb48/login', function(req,res){

	var oauth_token = req.query.oauth_token;
	var oauth_verifier = req.query.oauth_verifier;

	if (oauth_token && oauth_verifier && req.session.oauth){
		if(DEBUG)console.log('TRY TO GET OAUTHTOKEN');
		oauth.getOAuthAccessToken(oauth_token, null, oauth_verifier,
		function(error, oauth_access_token, oauth_access_token_secret, results){
			
			if(error){
				console.log(error);
			} else {
				req.session.regenerate(function(){
					req.session.user = results.screen_name;
					req.session.user_id = results.user_id;
					res.redirect('/rmb48');
				});
			}
		});
	} else {
		oauth.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){
			if(error){
			} else {
				req.session.oauth = {
					oauth_token: oauth_token,
					oauth_token_secret: oauth_token_secret,
					request_token_results: results
				};
				res.redirect('https://api.twitter.com/oauth/authorize?oauth_token=' + oauth_token);
			}
		});
	}
});

// ページ：ログアウト
app.get('/rmb48/logout', function(req, res){
	req.session.destroy(function() {
		res.redirect('/rmb48');
	});
});

app.get('/sample/?', function(req, res){
  console.log(req.query);
  var name="guest";
  if(req.query.name){
    name = req.query.name;
  }
  var file="sample";
  if(req.query.file){
    file = req.query.file;
  }
  res.render(file, {
    title: 'sample',
    name : name
  });
});

// ページ：コレクションの内容表示

app.get('/rmb48/collection', function(req, res){
	//ログイン済みの場合
	if(isLogin(req)){
		var dbc = new DBController();
		var callback = function(r){
			if(DEBUG)console.log(r);
			res.render('collection',{
			title: 'rmb48',
			isLoggedIn: true,
			name: req.session.user,
			elements: r
    			})};
		dbc.get_element(req.session.user, req.query.id, callback);

	} else {
		//未ログインの場合
		res.render('index_nologin',{
			title: 'rmb48',
			isLoggedIn: false
		});
	}
});

// ページ：エレメントの詳細表示

app.get('/rmb48/element', function(req, res){
	//ログイン済みの場合
	if(isLogin(req)){
		var dbc = new DBController();
		var callback = function(r){
			res.render('element',{
			title: 'rmb48',
			isLoggedIn: true,
			name: req.session.user,
			element: r[0]
    			})};
		dbc.get_ske48_detail(req.session.user, '', req.query.id, callback);

	} else {
		//未ログインの場合
		res.render('index_nologin',{
			title: 'rmb48',
			isLoggedIn: false
		});
	}
});

// Only listen on $ node app.js

if (!module.parent) {
  app.listen(80);
  console.log("Express server listening on port %d", app.address().port);
}
